package LC;

/**
 * @author lhn
 * @date 2024-09-20 9:28
 * 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。
 * 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
 */

public class RemoveDuplicatesFromSortedArrayII {
    public static void main(String[] args) {
        int[] nums1 = {1, 1, 1, 2, 2, 3};
        System.out.println(removeDuplicates(nums1));
        printArray(nums1);

        int[] nums2 = {0, 0, 1, 1, 1, 1, 2, 3, 3};
        System.out.println(removeDuplicates(nums2));
        printArray(nums2);

        int[] nums3 = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4};
        System.out.println(removeDuplicates2(nums3));
        printArray(nums3);
    }

    public static int removeDuplicates(int[] nums) {
        int n = nums.length;
        int j = 1;
        for (int i = 0; i < n; i++) {
            if (nums[i] != nums[j] || nums[i] != nums[j - 1]) {
                nums[++j] = nums[i];
            }
        }
        return j;
    }
    public static void printArray(int[] nums) {
        for (int num : nums) {
            System.out.print(num + " ");
        }
        System.out.println();
    }

    public static int removeDuplicates2(int[] nums) {
        return process(nums, 2);
    }

    public static int process(int[] nums, int k) {
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (i < k || nums[i] != nums[j - k]) {
                nums[j] = nums[i];
                j++;
            }
        }
        return j;
    }
}
